ã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ããã¹ã¿ãŒããŠãããªãã®Tailwind CSSã¹ãã«ãåäžãããŸããããã¬ã¹ãã³ã·ããç¶æ ãã°ã«ãŒãã¢ãã£ãã¡ã€ã¢ãçµã¿åãããŠãè€éã§åçãªUIãç°¡åã«æ§ç¯ããæ¹æ³ãåŠã³ãŸãã
Tailwindã®åãè§£ãæŸã€ïŒè€éãªãŠãŒãã£ãªãã£ã®çµã¿åãããå®çŸããã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã®æè¡
Tailwind CSSã¯ãå€ãã®éçºè
ãWebã®ã¹ã¿ã€ãªã³ã°ã«åãçµãæ¹æ³ãæ ¹æ¬çã«å€ããŸããããã®ãŠãŒãã£ãªãã£ãã¡ãŒã¹ãã®å²åŠã«ãããHTMLããé¢ããããšãªããè¿
éãªãããã¿ã€ãã³ã°ãšã«ã¹ã¿ã ãã¶ã€ã³ã®æ§ç¯ãå¯èœã«ãªããŸããp-4
ãtext-blue-500
ã®ãããªåäžã®ãŠãŒãã£ãªãã£ãé©çšããã®ã¯ç°¡åã§ãããTailwindã®çã®åã¯ãè€éã§ã¹ããŒããã«ããã€ã¬ã¹ãã³ã·ããªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæãå§ãããšãã«è§£ãæŸãããŸãããã®ç§èš£ã¯ã匷åã§ãããªããã·ã³ãã«ãªæŠå¿µãã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã«ãããŸãã
å€ãã®éçºè
ã¯ãhover:bg-blue-500
ãmd:grid-cols-3
ã®ãããªåäžã®ã¢ãã£ãã¡ã€ã¢ã«ã¯æ
£ããŠããŸãããããããããŒæã倧ããªç»é¢ã§ããã€ããŒã¯ã¢ãŒããæå¹ãªå Žåã«ã®ã¿ã¹ã¿ã€ã«ãé©çšããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒããã§ã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ãç»å ŽããŸããããã¯ãè€æ°ã®ã¢ãã£ãã¡ã€ã¢ãé£çµããŠãæ¡ä»¶ã®çµã¿åããã«å¿çããè¶
ç¹å®ã®ã¹ã¿ã€ãªã³ã°ã«ãŒã«ãäœæããæè¡ã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã®äžçãæ·±ãæãäžããŠãããŸããåºæ¬ããå§ããç¶æ ããã¬ãŒã¯ãã€ã³ãã`group`ã`peer`ãããã«ã¯ä»»æã®ããªã¢ã³ããå«ãé«åºŠãªçµã¿åãããžãšåŸã ã«ã¹ãããã¢ããããŠãããŸããæåŸãŸã§èªãã°ãæ³åã§ããã»ãŒãã¹ãŠã®UIã³ã³ããŒãã³ãããTailwind CSSã®å®£èšçãªãšã¬ã¬ã³ã¹ããã£ãŠæ§ç¯ã§ããããã«ãªãã§ãããã
åºç€ïŒåäžã¢ãã£ãã¡ã€ã¢ã®çè§£
ã¹ã¿ããã³ã°ããåã«ããŸãã¯æ§æèŠçŽ ãçè§£ããªããã°ãªããŸãããTailwindã«ãããŠãã¢ãã£ãã¡ã€ã¢ãšã¯ããŠãŒãã£ãªãã£ã¯ã©ã¹ã«è¿œå ãããæ¥é èŸã§ããããã®ãŠãŒãã£ãªãã£ããã€é©çšãããã¹ãããæç€ºããŸãããããã¯æ¬è³ªçã«ãCSSã®æ¬äŒŒã¯ã©ã¹ãã¡ãã£ã¢ã¯ãšãªããã®ä»ã®æ¡ä»¶ä»ãã«ãŒã«ããŠãŒãã£ãªãã£ãã¡ãŒã¹ãã§å®è£ ãããã®ã§ãã
ã¢ãã£ãã¡ã€ã¢ã¯å€§ããæ¬¡ã®ããã«åé¡ã§ããŸãïŒ
- ç¶æ
ã¢ãã£ãã¡ã€ã¢ïŒ ãããã¯ããŠãŒã¶ãŒã®æäœãªã©ãèŠçŽ ã®çŸåšã®ç¶æ
ã«åºã¥ããŠã¹ã¿ã€ã«ãé©çšããŸããäžè¬çãªäŸã«ã¯
hover:
,focus:
,active:
,disabled:
,visited:
ããããŸãã - ã¬ã¹ãã³ã·ããã¬ãŒã¯ãã€ã³ãã¢ãã£ãã¡ã€ã¢ïŒ ãããã¯ãã¢ãã€ã«ãã¡ãŒã¹ãã®ã¢ãããŒãã«åŸããç¹å®ã®ç»é¢ãµã€ãºä»¥äžã§ã¹ã¿ã€ã«ãé©çšããŸããããã©ã«ãã¯
sm:
,md:
,lg:
,xl:
,2xl:
ã§ãã - ã·ã¹ãã èšå®ã¢ãã£ãã¡ã€ã¢ïŒ ãããã¯ããŠãŒã¶ãŒã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã©ãŠã¶ã®èšå®ã«å¿çããŸããæãæåãªã®ã¯ããŒã¯ã¢ãŒãçšã®
dark:
ã§ãããmotion-reduce:
ãprint:
ãªã©ãéåžžã«äŸ¿å©ã§ãã - æ¬äŒŒã¯ã©ã¹ïŒæ¬äŒŒèŠçŽ ã¢ãã£ãã¡ã€ã¢ïŒ ãããã¯ãèŠçŽ ã®ç¹å®ã®æ§é çç¹æ§ãéšåãã¿ãŒã²ããã«ããŸããäŸãšããŠ
first:
,last:
,odd:
,even:
,before:
,after:
,placeholder:
ãªã©ããããŸãã
äŸãã°ãã·ã³ãã«ãªãã¿ã³ã¯æ¬¡ã®ããã«ç¶æ ã¢ãã£ãã¡ã€ã¢ã䜿çšãããããããŸããïŒ
<button class="bg-sky-500 hover:bg-sky-600 ...">Click me</button>
ããã§ãhover:bg-sky-600
ã¯ããŠãŒã¶ãŒã®ã«ãŒãœã«ããã¿ã³ã®äžã«ããå Žåã«ã®ã¿ãããæãèæ¯è²ãé©çšããŸããããããç§ãã¡ãããããæ§ç¯ããŠããäžã§ã®åºæ¬æŠå¿µã§ãã
ã¹ã¿ããã³ã°ã®éæ³ïŒåçUIã®ããã®ã¢ãã£ãã¡ã€ã¢ã®çµã¿åãã
ã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã¯ããããã®æ¥é èŸãé£çµããŠãããå ·äœçãªæ¡ä»¶ãäœæããããã»ã¹ã§ããæ§æã¯ã·ã³ãã«ã§çŽæçã§ããã³ãã³ã§åºåã£ãŠæ¬¡ã ã«é 眮ããã ãã§ãã
æ§æïŒ modifier1:modifier2:utility-class
é åºã¯éèŠã§ããTailwindã¯ã¢ãã£ãã¡ã€ã¢ãå·Šããå³ã«é©çšããŸããäŸãã°ãã¯ã©ã¹md:hover:text-red-500
ã¯ããããã以äžã®CSSã«å€æãããŸãïŒ
@media (min-width: 768px) {
.md\:hover\:text-red-500:hover {
color: red;
}
}
ãã®ã«ãŒã«ã¯ããäžéã®ãã¬ãŒã¯ãã€ã³ã以äžã§ããã®èŠçŽ ããããŒããããšãã«ãããã¹ãã®è²ãèµ€ã«ããããšããæå³ã§ããããã€ãã®å®è·µçã§çŸå®çãªäŸãèŠãŠãããŸãããã
äŸ1ïŒãã¬ãŒã¯ãã€ã³ããšç¶æ ã®çµã¿åãã
ã¿ããããã€ã¹ãšã«ãŒãœã«ããŒã¹ã®ããã€ã¹ã§ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã®æåãå€ããããšã¯ãäžè¬çãªèŠä»¶ã§ããããã¯ãç°ãªããã¬ãŒã¯ãã€ã³ãã§ãããŒå¹æã倿Žããããšã§è¿äŒŒã§ããŸãã
ãã¹ã¯ãããã§ã¯ãããŒæã«ãããã«æµ®ãäžããããã¢ãã€ã«ã§ã¯ã¿ããæã®ã¹ãã£ãããŒãããŒç¶æ ãé¿ããããã«ãããŒå¹æããªãã«ãŒãã³ã³ããŒãã³ããèããŠã¿ãŸãããã
<div class="... transition-transform duration-300 md:hover:scale-105 md:hover:-translate-y-1">...</div>
解説ïŒ
transition-transform duration-300
: transformã®å€æŽã«å¯ŸããŠã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ãèšå®ããŸããmd:hover:scale-105
: äžéã®ãã¬ãŒã¯ãã€ã³ãïŒ768pxïŒä»¥äžã§ãã«ãŒãããããŒããããšãã5%æ¡å€§ããŸããmd:hover:-translate-y-1
: äžéã®ãã¬ãŒã¯ãã€ã³ã以äžã§ãã«ãŒãããããŒããããšãããããã«äžã«ç§»åãããŸãã
768pxããå°ããç»é¢ã§ã¯ãmd:
ã¢ãã£ãã¡ã€ã¢ããããŒå¹æã®é©çšãé²ããã¢ãã€ã«ãŠãŒã¶ãŒã«ããè¯ãäœéšãæäŸããŸãã
äŸ2ïŒããŒã¯ã¢ãŒããšã€ã³ã¿ã©ã¯ãã£ããã£ã®ã¬ã€ã€ãŒå
ããŒã¯ã¢ãŒãã¯ãã¯ãããããªæ©èœã§ã¯ãªãããŠãŒã¶ãŒã®æåŸ ã§ããã¹ã¿ããã³ã°ã«ãããåã«ã©ãŒã¹ããŒã ã«ç¹åããã€ã³ã¿ã©ã¯ã·ã§ã³ã¹ã¿ã€ã«ãå®çŸ©ã§ããŸãã
ã©ã€ãã¢ãŒããšããŒã¯ã¢ãŒãã®äž¡æ¹ã§ãããã©ã«ãç¶æ ãšãããŒç¶æ ã§ç°ãªãè²ãæã€ãªã³ã¯ãã¹ã¿ã€ãªã³ã°ããŠã¿ãŸãããã
<a href="#" class="text-blue-600 underline hover:text-blue-800 dark:text-cyan-400 dark:hover:text-cyan-200">Read more</a>
解説ïŒ
text-blue-600 hover:text-blue-800
: ã©ã€ãã¢ãŒãïŒããã©ã«ãïŒã§ã¯ãããã¹ãã¯éè²ã§ããããŒãããšããæãéã«ãªããŸããdark:text-cyan-400
: ããŒã¯ã¢ãŒããã¢ã¯ãã£ããªå Žåãããã©ã«ãã®ããã¹ãè²ã¯æããã·ã¢ã³ã«å€ãããŸããdark:hover:text-cyan-200
: ããŒã¯ã¢ãŒããã¢ã¯ãã£ãã§ãã€ãªã³ã¯ããããŒãããå Žåãããã¹ãã¯ããã«æããã·ã¢ã³ã«ãªããŸãã
ããã«ããã1è¡ã§èŠçŽ ã®ããŒã察å¿ã¹ã¿ã€ã«ã®å®å šãªã»ãããäœæããæ¹æ³ãããããŸãã
äŸ3ïŒäžäœäžäœ - ã¬ã¹ãã³ã·ããããŒã¯ã¢ãŒããç¶æ ã¢ãã£ãã¡ã€ã¢ã®ã¹ã¿ããã³ã°
ã§ã¯ãããã3ã€ã®æŠå¿µãã¹ãŠã1ã€ã®åŒ·åãªã«ãŒã«ã«ãŸãšããŠã¿ãŸãããããã©ãŒã«ã¹ãããŠããããšã瀺ãå¿ èŠãããå ¥åãã£ãŒã«ããæ³åããŠãã ãããèŠèŠçãªãã£ãŒãããã¯ã¯ãã¹ã¯ããããšã¢ãã€ã«ã§ç°ãªããããŒã¯ã¢ãŒãã«ãé©å¿ããå¿ èŠããããŸãã
<input type="text" class="border-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 md:dark:focus:ring-yellow-400" />
ããã§æãè€éãªã¯ã©ã¹ãmd:dark:focus:ring-yellow-400
ã«æ³šç®ããŸãããã
解説ïŒ
md:
: ãã®ã«ãŒã«ã¯äžéã®ãã¬ãŒã¯ãã€ã³ãïŒ768pxïŒä»¥äžã§ã®ã¿é©çšãããŸããdark:
: ãã®ãã¬ãŒã¯ãã€ã³ãå ã§ããŠãŒã¶ãŒãããŒã¯ã¢ãŒããæå¹ã«ããŠããå Žåã«ã®ã¿é©çšãããŸããfocus:
: ãã®ãã¬ãŒã¯ãã€ã³ããšã«ã©ãŒã¢ãŒãå ã§ãå ¥åèŠçŽ ããã©ãŒã«ã¹ãããŠããå Žåã«ã®ã¿é©çšãããŸããring-yellow-400
: ããã3ã€ã®æ¡ä»¶ããã¹ãŠæºãããããšããé»è²ã®ãã©ãŒã«ã¹ãªã³ã°ãé©çšããŸãã
ãã®åäžã®ãŠãŒãã£ãªãã£ã¯ã©ã¹ã¯ãã倧ããªç»é¢ã§ãããŒã¯ã¢ãŒãã®ãšãã«ããã®ãã©ãŒã«ã¹ãããå
¥åãé»è²ã®ãªã³ã°ã§åŒ·èª¿è¡šç€ºããããšããéåžžã«å
·äœçãªåäœãäžããŸããäžæ¹ãããã·ã³ãã«ãªfocus:ring-blue-500
ã¯ãä»ã®ãã¹ãŠã®ã·ããªãªïŒã¢ãã€ã«ã®ã©ã€ã/ããŒã¯ã¢ãŒãããã¹ã¯ãããã®ã©ã€ãã¢ãŒãïŒã§ã®ããã©ã«ãã®ãã©ãŒã«ã¹ã¹ã¿ã€ã«ãšããŠæ©èœããŸãã
åºæ¬ãè¶ ããŠïŒ`group`ãš`peer`ã䜿ã£ãé«åºŠãªã¹ã¿ããã³ã°
ã¹ã¿ããã³ã°ã¯ãèŠçŽ éã®é¢ä¿ãäœæããã¢ãã£ãã¡ã€ã¢ãå°å
¥ãããšãããã«åŒ·åã«ãªããŸããgroup
ãšpeer
ã¢ãã£ãã¡ã€ã¢ã䜿çšãããšããããã芪ãŸãã¯å
åŒèŠçŽ ã®ç¶æ
ã«åºã¥ããŠèŠçŽ ãã¹ã¿ã€ãªã³ã°ã§ããŸãã
`group-*`ã«ããåèª¿å¹æ
group
ã¢ãã£ãã¡ã€ã¢ã¯ã芪èŠçŽ ãšã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããã®åèŠçŽ ã®1ã€ä»¥äžã«åœ±é¿ãäžããã¹ãå Žåã«æé©ã§ãã芪ã«group
ã¯ã©ã¹ã远å ããããšã§ãä»»æã®åèŠçŽ ã§group-hover:
ãgroup-focus:
ãªã©ã䜿çšã§ããŸãã
ã«ãŒãã®ä»»æã®éšåã«ãããŒãããšããã®ã¿ã€ãã«ãè²ãå€ããç¢å°ã¢ã€ã³ã³ãåãã«ãŒããäœæããŸãããããããããŒã¯ã¢ãŒãã«å¯Ÿå¿ãããå¿ èŠããããŸãã
<a href="#" class="group block p-6 bg-white dark:bg-slate-800 rounded-lg shadow-md">
<h3 class="text-slate-900 group-hover:text-blue-600 dark:text-white dark:group-hover:text-blue-400">Card Title</h3>
<p class="text-slate-500 dark:text-slate-400">Card content goes here.</p>
<span class="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">â</span>
</a>
ã¹ã¿ãã¯ãããã¢ãã£ãã¡ã€ã¢ã®è§£èª¬ïŒ
h3
ã®dark:group-hover:text-blue-400
: ããŒã¯ã¢ãŒããã¢ã¯ãã£ãã§ãã€èŠªã®`group`ããããŒããããšããã¿ã€ãã«ã®ããã¹ãè²ã倿ŽããŸããããã¯ããã©ã«ãã®ããŒã¯ã¢ãŒãã®è²ãäžæžãããŸãããã©ã€ãã¢ãŒãã®ãããŒã¹ã¿ã€ã«ã«ã¯åœ±é¿ããŸãããspan
ã®group-hover:translate-x-1
: 芪ã®`group`ããããŒããããšãïŒã©ã®ã¢ãŒãã§ãïŒãç¢å°ã¢ã€ã³ã³ãå³ã«ç§»åãããŸãã
`peer-*`ã«ããåçãªå åŒèŠçŽ ãšã®ã€ã³ã¿ã©ã¯ã·ã§ã³
peer
ã¢ãã£ãã¡ã€ã¢ã¯ãå
åŒèŠçŽ ãã¹ã¿ã€ãªã³ã°ããããã«èšèšãããŠããŸããèŠçŽ ã«peer
ã¯ã©ã¹ãããŒã¯ãããšããã®*åŸç¶ã®*å
åŒèŠçŽ ã§peer-focus:
ãpeer-invalid:
ãpeer-checked:
ãªã©ã®ã¢ãã£ãã¡ã€ã¢ã䜿çšããŠãpeerã®ç¶æ
ã«åºã¥ããŠã¹ã¿ã€ãªã³ã°ã§ããŸãã
å žåçãªäœ¿çšäŸã¯ããã©ãŒã ã®å ¥åãšãã®ã©ãã«ã§ããå ¥åããã©ãŒã«ã¹ããããšãã«ã©ãã«ã®è²ã倿Žããå ¥åãç¡å¹ãªå Žåã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããšããŸããããã¯ãã¬ãŒã¯ãã€ã³ããã«ã©ãŒã¹ããŒã ãè¶ããŠæ©èœããå¿ èŠããããŸãã
<div>
<label for="email" class="text-sm font-medium text-gray-700 dark:text-gray-300 peer-focus:text-violet-600 dark:peer-focus:text-violet-400">Email</label>
<input type="email" id="email" class="peer mt-1 block w-full border-gray-300 invalid:border-red-500 focus:border-violet-500 ..." required />
<p class="mt-2 invisible text-sm text-red-600 peer-invalid:visible">Please provide a valid email address.</p>
</div>
ã¹ã¿ãã¯ãããã¢ãã£ãã¡ã€ã¢ã®è§£èª¬ïŒ
label
ã®dark:peer-focus:text-violet-400
: ããŒã¯ã¢ãŒããã¢ã¯ãã£ãã§ãã€å åŒã®`peer`å ¥åããã©ãŒã«ã¹ããããšããã©ãã«ã®è²ããã€ãªã¬ããã«å€æŽããŸããããã¯ãã©ã€ãã¢ãŒãçšã®æšæºçãªpeer-focus:text-violet-600
ãšé£æºããŠæ©èœããŸãã- ãšã©ãŒ
p
ã®peer-invalid:visible
: å åŒã®`peer`å ¥åã`invalid`ç¶æ ïŒäŸïŒç©ºã®å¿ é ãã£ãŒã«ãïŒã«ãªã£ããšãããã®å¯èŠæ§ã`invisible`ãã`visible`ã«å€æŽããŸããããã¯ãJavaScriptãªãã§ã®ãã©ãŒã ããªããŒã·ã§ã³ã¹ã¿ã€ãªã³ã°ã®å¥œäŸã§ãã
æçµããã³ãã£ã¢ïŒä»»æããªã¢ã³ããšã®ã¹ã¿ããã³ã°
æã«ã¯ãTailwindãæšæºã§ã¢ãã£ãã¡ã€ã¢ãæäŸããŠããªãæ¡ä»¶ã«åºã¥ããŠã¹ã¿ã€ã«ãé©çšããå¿ èŠãããå ŽåããããŸããããã§ä»»æããªã¢ã³ãã®åºçªã§ãããããã䜿çšãããšãã¯ã©ã¹åã«ã«ã¹ã¿ã ã»ã¬ã¯ã¿ãçŽæ¥èšè¿°ã§ãããããŠã¯ããããããã¹ã¿ããã³ã°å¯èœã§ãïŒ
æ§æã¯è§æ¬åŒ§ã䜿çšããŸãïŒ[&_selector]:utility
ã
äŸ1ïŒãããŒæã«ç¹å®ã®åèŠçŽ ãã¿ãŒã²ããã«ãã
ã³ã³ãããããã倧ããªç»é¢ã§ã®ã¿ããã®ã³ã³ããããããŒããããšãã«å
éšã®ãã¹ãŠã®<strong>
ã¿ã°ãç·è²ã«ããããšããŸãã
This is a paragraph with important text that will change color. This is another paragraph with another bolded part.<div class="p-4 border lg:hover:[&_strong]:text-green-500">
解説ïŒ
ã¯ã©ã¹lg:hover:[&_strong]:text-green-500
ã¯ãã¬ã¹ãã³ã·ãã¢ãã£ãã¡ã€ã¢ïŒlg:
ïŒãç¶æ
ã¢ãã£ãã¡ã€ã¢ïŒhover:
ïŒãä»»æããªã¢ã³ãïŒ[&_strong]:
ïŒãçµã¿åãããŠãã倧ããªç»é¢ä»¥äžã§ããã®divããããŒããããšãã«ããã¹ãŠã®åå«<strong>
èŠçŽ ãèŠã€ããŠããã®ããã¹ããç·ã«ããããšããéåžžã«å
·äœçãªã«ãŒã«ãäœæããŸãã
äŸ2ïŒå±æ§ã»ã¬ã¯ã¿ãšã®ã¹ã¿ããã³ã°
ãã®ãã¯ããã¯ã¯ã`data-*`屿§ã䜿çšããŠç¶æ ã管çããJavaScriptãã¬ãŒã ã¯ãŒã¯ïŒäŸïŒã¢ã³ãŒãã£ãªã³ãã¿ããããããããŠã³ïŒãšçµ±åããéã«éåžžã«åœ¹ç«ã¡ãŸãã
ã¢ã³ãŒãã£ãªã³ã¢ã€ãã ã®ã³ã³ãã³ããšãªã¢ããããã©ã«ãã§ã¯é衚瀺ã«ãã芪ã`data-state="open"`ãæã€ãšãã«è¡šç€ºãããããã«ã¹ã¿ã€ãªã³ã°ããŠã¿ãŸãããããŸããããŒã¯ã¢ãŒãã§éããŠãããšãã«ã¯ç°ãªãèæ¯è²ã«ããããšããŸãã
<div data-state="closed" class="border rounded">
<h3>... Accordion Trigger ...</h3>
<div class="overflow-hidden h-0 [data-state=open]:h-auto dark:[data-state=open]:bg-gray-800">
Accordion Content...
</div>
</div>
ããªãã®JavaScriptã¯ã芪ã®`data-state`屿§ã`open`ãš`closed`ã®éã§åãæ¿ããããšã«ãªããŸãã
ã¹ã¿ãã¯ãããã¢ãã£ãã¡ã€ã¢ã®è§£èª¬ïŒ
ã³ã³ãã³ã`div`ã®ã¯ã©ã¹dark:[data-state=open]:bg-gray-800
ã¯å®ç§ãªäŸã§ããããã¯ããããŒã¯ã¢ãŒããã¢ã¯ãã£ãã§ãã€èŠçŽ ã`data-state="open"`屿§ãæã€å Žåãæ¿ãç°è²ã®èæ¯ãé©çšããããšããæå³ã§ããããã¯ããã¹ãŠã®ã¢ãŒãã§ã®å¯èŠæ§ãå¶åŸ¡ããåºæ¬ã®`[data-state=open]:h-auto`ã«ãŒã«ãšã¹ã¿ãã¯ãããŠããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
ã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã¯åŒ·åã§ãããã¯ãªãŒã³ã§ç®¡çããããã³ãŒãããŒã¹ãç¶æããããã«è³¢ã䜿çšããããšãäžå¯æ¬ ã§ãã
- å¯èªæ§ã®ç¶æïŒ é·ããŠãŒãã£ãªãã£ã¯ã©ã¹ã®æååã¯èªã¿ã«ãããªãããšããããŸããå ¬åŒã®Tailwind CSS Prettierãã©ã°ã€ã³ã®ãããªèªåã¯ã©ã¹ãœãŒã¿ãŒã䜿çšããããšã匷ããå§ãããŸããããã«ããã¯ã©ã¹ã®é åºãæšæºåãããè€éãªçµã¿åãããã¯ããã«ã¹ãã£ã³ãããããªããŸãã
- ã³ã³ããŒãã³ãã®æœè±¡åïŒ åãè€éãªã¢ãã£ãã¡ã€ã¢ã®ã¹ã¿ãã¯ãå€ãã®èŠçŽ ã§ç¹°ãè¿ããŠããããšã«æ°ã¥ãããããã®ãã¿ãŒã³ãåå©çšå¯èœãªã³ã³ããŒãã³ãïŒäŸïŒReactãVueã³ã³ããŒãã³ããLaravelã®Bladeã³ã³ããŒãã³ãããŸãã¯åçŽãªããŒã·ã£ã«ïŒã«æœè±¡åãã匷ãã·ã°ãã«ã§ãã
- JITãšã³ãžã³ãåãå ¥ããïŒ ä»¥åã¯ãå€ãã®ããªã¢ã³ããæå¹ã«ãããšCSSãã¡ã€ã«ã®ãµã€ãºã倧ãããªãå¯èœæ§ããããŸãããTailwindã®Just-In-TimeïŒJITïŒãšã³ãžã³ã«ãããããã¯åé¡ã§ã¯ãããŸãããJITãšã³ãžã³ã¯ãã¡ã€ã«ãã¹ãã£ã³ããã¹ã¿ãã¯ãããã¢ãã£ãã¡ã€ã¢ã®ãã¹ãŠã®è€éãªçµã¿åãããå«ããå¿ èŠãªCSSã ããçæããŸããæçµçãªãã«ããžã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯ããããããªã®ã§ãå®å¿ããŠã¹ã¿ããã³ã°ã§ããŸãã
- 詳现床ãšé åºãçè§£ããïŒ HTMLå ã®ã¯ã©ã¹ã®é åºã¯ãéåžžãåŸæ¥ã®CSSã®ããã«è©³çŽ°åºŠã«åœ±é¿ãäžããŸããããã ããåããã¬ãŒã¯ãã€ã³ããšç¶æ ã§2ã€ã®ãŠãŒãã£ãªãã£ãåãããããã£ïŒäŸïŒ`md:text-left md:text-right`ïŒãå¶åŸ¡ããããšããå Žåãæååã®æåŸã«çŸãããã®ãåã¡ãŸããPrettierãã©ã°ã€ã³ã¯ãã®ããžãã¯ãåŠçããŠãããŸãã
çµè«ïŒæ³åã§ãããã®ã¯äœã§ãæ§ç¯ã§ãã
Tailwind CSSã®ã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã¯åãªãæ©èœã§ã¯ãããŸãããããã¯TailwindãåçŽãªãŠãŒãã£ãªãã£ã©ã€ãã©ãªããå æ¬çãªUIãã¶ã€ã³ãã¬ãŒã ã¯ãŒã¯ãžãšæè¯ãããã³ã¢ã¡ã«ããºã ã§ããã¬ã¹ãã³ã·ããç¶æ ãããŒããã°ã«ãŒãããã¢ãããã«ã¯ä»»æã®ããªã¢ã³ããçµã¿åãããæè¡ãç¿åŸããããšã§ãæ¢è£œã®ã³ã³ããŒãã³ãã®å¶éããè§£æŸãããçã«ãªãŒããŒã¡ã€ãã§ãåçã§ãã¬ã¹ãã³ã·ããªã€ã³ã¿ãŒãã§ãŒã¹ãäœæããåãæã«å ¥ããããšãã§ããŸãã
éèŠãªã®ã¯ããã¯ãåäžæ¡ä»¶ã®ã¹ã¿ã€ã«ã«éå®ãããªããšããããšã§ããèŠçŽ ãç¹å®ã®ç¶æ³ã®çµã¿åããã®äžã§ã©ã®ããã«èŠããã¹ãããã©ã®ããã«æ¯ãèãã¹ããã宣èšçã«å®çŸ©ã§ããããã«ãªããŸãããããŒã¯ã¢ãŒãã«é©å¿ããã·ã³ãã«ãªãã¿ã³ã§ãããè€éãªç¶æ èªèãã©ãŒã ã³ã³ããŒãã³ãã§ãããã¢ãã£ãã¡ã€ã¢ã¹ã¿ããã³ã°ã¯ãããŒã¯ã¢ããã®å¿«é©ããé¢ããããšãªããããããšã¬ã¬ã³ããã€å¹ççã«æ§ç¯ããããã«å¿ èŠãªããŒã«ãæäŸããŸãã